package com.xs;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.xs.config.AppScan;
import com.xs.service.IUserService;
import com.xs.service.UserService;

/**
 * @Title: <P>App.java</P>
 * @Package <P>com.xs.service</P>
 * @Description: <P>TODO该类...</P>
 * @author renweiping
 * @date 2019年2月25日 下午4:18:33
 * @version 1.0
 */

public class ProviderConfigMain {



	
	
	 public static void main(String[] args) throws Exception {
		 
		 AnnotationConfigApplicationContext config = new  AnnotationConfigApplicationContext(AppScan.class);
	/*	 config.register(UserService.class);
		 config.refresh();*/
		 
		 IUserService userService = (IUserService) config.getBean("userService");
		 IUserService userService2 = (IUserService) config.getBean("userServiceExt");
		
		 
		 // 当前应用配置
		 ApplicationConfig app = new ApplicationConfig();
		 app.setName("dubbo-provider");
		
		 // 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
		 RegistryConfig registry = new RegistryConfig();
		 registry.setAddress("zookeeper://127.0.0.1:2181");
		
		 // 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
		 ProtocolConfig protocol = new ProtocolConfig();
		 protocol.setName("dubbo");
		 protocol.setPort(20880);
		// protocol.setThreads(100);
		 
		// 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
		// 服务提供者暴露服务配置
		 ServiceConfig<IUserService> service = new ServiceConfig<IUserService>(); // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
		 service.setApplication(app);
		 service.setRegistry(registry); // 多个注册中心可以用setRegistries()
		 service.setProtocol(protocol); // 多个协议可以用setProtocols()
		 service.setInterface(IUserService.class);
		 service.setRef(userService);
		 //service.setVersion("1.0");
		  
		 // 暴露及注册服务
		 service.export();
		 
		 
		 ServiceConfig<IUserService> service2 = new ServiceConfig<IUserService>(); // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
		 service2.setApplication(app);
		 service2.setRegistry(registry); // 多个注册中心可以用setRegistries()
		 service2.setProtocol(protocol); // 多个协议可以用setProtocols()
		 service2.setInterface(IUserService.class);
		 service2.setRef(userService2);
		 //service.setVersion("1.0");
		  
		 // 暴露及注册服务
		 service2.export();
		 
		 
		 System.in.read();
		 
	    }

}
